home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / 3D No 'doz II / Source / Sources / Loader.c < prev    next >
Encoding:
Text File  |  1998-06-20  |  937 b   |  66 lines  |  [TEXT/CWIE]

  1. asm void __Startup__(void);
  2.  
  3. typedef pascal void (*MainPP)(Handle theHandle);
  4.  
  5. static void Load3DNoDoz(void);
  6.  
  7. asm void __Startup__(void)
  8. {
  9.         DS.B    512                // for the Disassembler load
  10.         
  11.         Movem.L    D0-D2/A0-A1/A4,-(SP)
  12.         Jsr        Load3DNoDoz
  13.         Movem.L    (SP)+,D0-D2/A0-A1/A4
  14.         
  15.         Rts
  16. }
  17.  
  18. static void Load3DNoDoz(void)
  19. {
  20.     short        cResFile = CurResFile();
  21.     short        rFile = OpenResFile("\p3D no ’doz II");
  22.     Handle        h;
  23.     FileParam    pb;
  24.     MainPP        mainProc;
  25.     THz            cZone;
  26.     
  27.     if (rFile == -1)
  28.     {
  29.     DeleteMe:
  30.         pb.ioNamePtr = "\pDisassembler";
  31.         pb.ioVRefNum = 0;
  32.         pb.ioFVersNum = 0;
  33.         
  34.         PBDeleteSync((ParmBlkPtr) &pb);
  35.         
  36.         UseResFile(cResFile);
  37.         
  38.         return;
  39.     }
  40.     
  41.     cZone = GetZone();
  42.     SetZone(SystemZone());
  43.     
  44.     h = Get1Resource('init', 128);
  45.     
  46.     if (!h)
  47.     {
  48.         SetZone(cZone);
  49.         goto DeleteMe;
  50.     }
  51.     
  52.     HNoPurge(h);
  53.     HLock(h);
  54.     DetachResource(h);
  55.     
  56.     mainProc = (MainPP) *h;
  57.     
  58.     (*mainProc)(h);
  59.     
  60.     SetZone(cZone);
  61.     
  62.     CloseResFile(rFile);
  63.     
  64.     UseResFile(cResFile);
  65. }
  66.